import { TOKENNAME, HTTP_REQUEST_URL,tenantid } from '../config/app.js';
import { LOGIN_STATUS } from '../config/cache.js'; // 假设你存储 token 的 key 是 LOGIN_STATUS
import Cache from '../utils/cache.js';
// 防止重复跳转的全局标识
let isRedirecting = false;

// 通用请求方法封装
const request = (site, url, method = 'GET', data = {}, requireAuth = false) => {
  return new Promise((resolve, reject) => {
    let token = Cache.get(LOGIN_STATUS) || ''; // 从缓存中获取 token

    // 如果需要携带 token 并且 token 不存在，触发登录逻辑
    if (requireAuth && !token) {
      if (!isRedirecting) {
        return redirectToLogin(); // 跳转登录页面
      }
      reject('未登录'); // 中止当前请求逻辑
      return;
    }

    // 设置请求头，根据是否需要携带 token 进行判断
    let headers = {
      'Content-Type': 'application/json',
      'tenant-id': tenantid
    };
    if (requireAuth && token) {
      headers['Authorization'] = token;
    }


    wx.request({
      url: site + url,
      method,
      data,
      header: headers,
      success: (res) => {
        if (res.statusCode === 200) {
          // 响应正常的情况
          if (res.data.code === 0 || res.data.code === 200) {
            resolve(res.data);
          } else if (res.data.code == 15002 || res.data.code == 886) {
            // Token 无效
            if (!isRedirecting) {
              redirectToLogin();
            }
            reject('登录失效');
          } else {
            wx.showToast({
              title: res.data.msg || res.data.message || res.errmsg || '系统错误',
              icon: 'error',
            });
            reject(res.data.msg || res.data.message || '系统错误');
          }
        } else {
          // 网络问题
          wx.showToast({
            title: '网络异常',
            icon: 'error',
          });
          reject('网络异常');
        }
      },
      fail: (err) => {
        console.error('请求失败:', err);
        wx.showToast({
          title: '网络超时',
          icon: 'error',
        });
        reject(err);
      },
    });
  });
};

// Token 过期或不存在时的处理方法
const redirectToLogin = () => {
  if (isRedirecting) return; // 避免重复跳转
  isRedirecting = true; // 设置跳转锁

  // 清除本地 token 等相关状态
  Cache.set(LOGIN_STATUS, '');
  wx.reLaunch({ url: '/pages/login/index' });
  isRedirecting = false; // 释放跳转锁
  // wx.showToast({
  //   title: '登录已过期，请重新登录',
  //   icon: 'none',
  //   duration: 2000,
  //   complete: () => {
  //     setTimeout(() => {
  //       wx.reLaunch({ url: '/pages/login/index' });
  //       isRedirecting = false; // 释放跳转锁
  //     }, 1500);
  //   },
  // });


};

// GET 请求封装
export const get = (site, url, data = {}, requireAuth = false) => {
  return request(site, url, 'GET', data, requireAuth);
};

// POST 请求封装
export const post = (site, url, data = {}, requireAuth = false) => {
  return request(site, url, 'POST', data, requireAuth);
};

// PUT 请求封装
export const put = (site, url, data = {}, requireAuth = false) => {
  return request(site, url, 'PUT', data, requireAuth);
};

// DELETE 请求封装
export const deletes = (site, url, data = {}, requireAuth = false) => {
  return request(site, url, 'DELETE', data, requireAuth);
};
